﻿/*
 
 data   : 21/09/2011
 author : alejandro (T-IT)
 
 */
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Microsoft.SharePoint;
using System.Net.Mail;
using Microsoft.SharePoint.Utilities;
using System.Linq;
using System.Collections.Generic;

namespace Presentation.ABDI.WebPart.VWPFormularioInscritos
{
    public partial class VWPFormularioInscritosUserControl : UserControl
    {
        SPWeb myWeb = SPContext.Current.Web;

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
                carregarCombo();
        }

        #region CARREGAR COMPONENTES.

        private void carregarCombo()
        {
            SPWeb site;
            SPList myList;

            site = SPContext.Current.Web;
            myList = site.Lists[Data.BioTecnologia.Properties.SharePointString.ListaUf];

            ddlUf.Items.Add(new ListItem("Selecione o Estado", "-1"));

            foreach (SPListItem myItem in myList.Items)
            {
                ddlUf.Items.Add(new ListItem(myItem["Estado"].ToString(), myItem.Title.ToString()));
            }


        }

        #endregion

        protected void btnEnviar_Click(object sender, EventArgs e)
        {
            try
            {
                SPSecurity.RunWithElevatedPrivileges(delegate()
                {
                    salvarItemFormularioCadastro();
                });

                CadastroComSucesso();
            }
            catch (Exception ex)
            {
                ExibirMensagemErro(ex.Message);

            }
        }

        /// <summary>
        /// Exibe a mensagem de erro utilizando uma função javascript.
        /// </summary>
        /// <param name="pMensagemErro"></param>
        public void ExibirMensagemErro(string pMensagemErro)
        {
            if (string.IsNullOrEmpty(pMensagemErro))
                Response.Write("<script>alert('" + pMensagemErro + "')</script>");
        }

        /// <summary>
        /// Exibe a mensagem de Sucesso de cadastro de Visitante.
        /// </summary>
        public void CadastroComSucesso()
        {
            Response.Write(@"<script>alert('Dados salvos com sucesso, em breve recibira um email com as noticias'); location.href='../default.aspx';</script>");
        }

        #region SALVAR DADOS

        private void salvarItemFormularioCadastro()
        {
            SPList myList;
            SPListItem myItem;
            Boolean isBrasil = ddlNacionalidade.SelectedValue.ToString().Equals("Brasil");

            myList = myWeb.Lists[Data.BioTecnologia.Properties.SharePointString.ListaInscritos];
            myItem = myList.Items.Add();

            if (isExisteCpf(txtCpf.Text))
                RetornoComError("ExisteCPF");
            else if (!isValidoCpf(txtCpf.Text) && isBrasil)
                RetornoComError("ErrorCPF");
            else
            {
                myItem["nome"] = txtNome.Text;
                myItem["CPF"] = isBrasil ? txtCpf.Text.Trim().ToUpper() : " ";
                myItem["passaporte"] = isBrasil ? " " : txtPassaporte.Text.Trim().ToUpper();
                myItem["RG"] = txtRg.Text;
                myItem["endereco"] = txtEndereco.Text;
                myItem["cidade"] = txtCidade.Text;
                myItem["UF"] = isBrasil ? ddlUf.SelectedValue.ToString() : " ";
                myItem["CEP"] = txtCep.Text;
                myItem["email"] = txtEmail.Text;
                myItem["instituicao"] = txtInstitucao.Text;
                myItem["tipoInstituicao"] = rblTipoInstitução.SelectedValue.ToString();
                myItem["participa1"] = rblParticipa1.SelectedValue.ToString().Equals("Sim") ? true : false;
                myItem["participa2"] = rblParticipa2.SelectedValue.ToString().Equals("Sim") ? true : false;
                myItem["participa3"] = rblParticipa3.SelectedValue.ToString().Equals("Sim") ? true : false;

                myItem.Update();

                envioMensagemCadastroVisitante(txtNome.Text, txtEmail.Text);
            }
        }

        private void envioMensagemCadastroVisitante(String nomeDestino, String destinoEmail)
        {
            //Crear Email para usuario cadastrado.
            SPList myListEmail = myWeb.Lists[Data.BioTecnologia.Properties.SharePointString.ListaDadosEventos];
            String assuntoEmail = "", origemEmail = "", mensagemEmail = "";
            var myItemEmail = myListEmail.Items.Cast<SPListItem>().ToList();

            assuntoEmail = myItemEmail[0]["assunto"].ToString();
            origemEmail = myItemEmail[0]["origem"].ToString();
            mensagemEmail = myItemEmail[0]["mensagem"].ToString();


            String msgEmail = String.Format(@"
                        <b>Prezado {0}</b>
                        <br />
                        <br />
                        {1}
                        <br />
                ", nomeDestino
                 , mensagemEmail);

            enviarEmail(origemEmail, destinoEmail, assuntoEmail, msgEmail);
        }

        /*
         :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ALERT !!!!
         * 
         * VERIFICAR ENVIO DE E-MAIL
         */
        //TODO: Verificar envio de email
        private void enviarEmail(String emailFrom, String emailTo, String assunto, String bodyMessage)
        {
            SPUtility.SendEmail(myWeb, true, false, emailTo, assunto, bodyMessage);
            //SmtpClient smtp = new SmtpClient("correio.abdi.com.br"); //("srvabdi010.abdi.com.br");
            //MailMessage message = new MailMessage(emailFrom, emailTo); //MailMessage message = new MailMessage("dbrito-modulo@abdi.com.br", emailTo);
            ////message.From = new MailAddress("dbrito-modulo@abdi.com.br");
            ////message.To.Add(emailTo);
            //message.Subject = assunto;                                  //essage.Subject = "Cadastro Visitante!";
            //message.IsBodyHtml = true;
            //message.Body = bodyMessage;
            //smtp.Send(message);
        }

        private void RetornoComError(string tError)
        {
            if (tError.Equals("ExisteCPF"))
            {
                lblErrorCPF.Text = "O CPF ja existe en outro usuario, por favor digite de novo.";
                lblErrorCPF.Style.Add("display", "block");
            }
            else if (tError.Equals("ErrorCPF"))
            {
                lblErrorCPF.Text = "O CPF nao e correito, por favor digite de novo.";
                lblErrorCPF.Style.Add("display", "block");
            }
            //lblErrorCPF.Style.Add("display", "none");

            txtNome.Text = txtNome.Text.Equals("") ? "" : txtNome.Text;
            ddlNacionalidade.SelectedValue = ddlNacionalidade.SelectedValue;
            txtCpf.Text = txtCpf.Text.Equals("") ? "" : txtCpf.Text;
            txtRg.Text = txtRg.Text.Equals("") ? "" : txtRg.Text;
            txtEndereco.Text = txtEndereco.Text.Equals("") ? "" : txtEndereco.Text;
            txtCidade.Text = txtCidade.Text.Equals("") ? "" : txtCidade.Text;
            ddlUf.SelectedValue = ddlUf.SelectedValue;
            txtCep.Text = txtCep.Text.Equals("") ? "" : txtCep.Text;
            txtEmail.Text = txtEmail.Text.Equals("") ? "" : txtEmail.Text;
            txtInstitucao.Text = txtInstitucao.Text.Equals("") ? "" : txtInstitucao.Text;
            rblTipoInstitução.SelectedValue.ToString();
            rblParticipa1.SelectedValue = rblParticipa1.SelectedValue;
            rblParticipa2.SelectedValue = rblParticipa2.SelectedValue;
            rblParticipa3.SelectedValue = rblParticipa2.SelectedValue;
        }

        /// <summary>
        /// Verifica a existencia de CPF dentro da lista.
        /// </summary>
        /// <param name="valorCPF">valor CPF prenchido no TextBox</param>
        /// <returns></returns>
        private bool isExisteCpf(string valorCPF)
        {
            Boolean existe = false;
            SPListItemCollection listItems = myWeb.Lists[Data.BioTecnologia.Properties.SharePointString.ListaInscritos].Items;

            foreach (SPListItem oItem in listItems)
            {
                String cpfLista = oItem["CPF"] == null ? "" : oItem["CPF"].ToString();
                if (cpfLista.Equals(valorCPF))
                {
                    existe = true;
                    break;
                }
            }

            return existe;
        }

        private Boolean isValidoCpf(String vrCPF)
        {
            string valor = vrCPF.Replace(".", "");
            valor = valor.Replace("-", "");

            if (valor.Length != 11)
                return false;

            bool igual = true;
            for (int i = 1; i < 11 && igual; i++)
                if (valor[i] != valor[0])
                    igual = false;

            if (igual || valor == "12345678909")
                return false;

            int[] numeros = new int[11];

            for (int i = 0; i < 11; i++)
                numeros[i] = int.Parse(
                  valor[i].ToString());

            int soma = 0;
            for (int i = 0; i < 9; i++)
                soma += (10 - i) * numeros[i];

            int resultado = soma % 11;

            if (resultado == 1 || resultado == 0)
            {
                if (numeros[9] != 0)
                    return false;
            }

            else if (numeros[9] != 11 - resultado)
                return false;

            soma = 0;
            for (int i = 0; i < 10; i++)
                soma += (11 - i) * numeros[i];

            resultado = soma % 11;

            if (resultado == 1 || resultado == 0)
            {
                if (numeros[10] != 0)
                    return false;
            }
            else
                if (numeros[10] != 11 - resultado)
                    return false;

            return true;
        }

        #endregion
    }
}
